﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIM.Geo.BE;
using System.Data;

namespace SIM.Geo.DA
{
    public class DAAvanceLabor : Base
    {
        #region Metodos
        /// <summary>
        /// Método que devuelve la lista de AvanceLabor
        /// </summary>
        /// <returns></returns>
        public List<AvanceLabor> ListarAvanceLabor()
        {
            return this.Context.AvanceLabor.ToList();
        }
        /// <summary>
        /// Método para insertar una AvanceLabor
        /// </summary>
        /// <param name="AvanceLabor"></param>
        /// <returns></returns>
        public int InsertarAvanceLabor(AvanceLabor avanceLabor)
        {
            this.Context.AvanceLabor.AddObject(avanceLabor);
            this.Context.SaveChanges();
            return avanceLabor.CodigoAvanceLabor;

        }
        /// <summary>
        /// Método para modificar un AvanceLabor
        /// </summary>
        /// <param name="AvanceLabor"></param>
        public void ModificarAvanceLabor(AvanceLabor avanceLabor)
        {
            this.Context.AvanceLabor.Attach(avanceLabor);
            this.Context.ObjectStateManager.ChangeObjectState(avanceLabor, EntityState.Modified);

            //Agrega Avance Diario
            foreach (var item in avanceLabor.DetalleAvanceLabor)
            {
                this.Context.ObjectStateManager.ChangeObjectState(item, EntityState.Added);

            }
            this.Context.SaveChanges();
        }
        /// <summary>
        /// Método para eliminar AvanceLabor
        /// </summary>
        /// <param name="AvanceLabor"></param>
        public void EliminarAvanceLabor(int codigoAvanceLabor)
        {
            //this.Context.AvanceLabor.DeleteObject(AvanceLabor);
            //this.Context.SaveChanges();
           this.Context.eliminarAvanceLabor(codigoAvanceLabor);
        }

        /// <summary>
        /// Método que devuelve AvanceLabor por codigo
        /// </summary>
        /// <param name="codigoAvanceLabor"></param>
        /// <returns></returns>
        public AvanceLabor ObtenerAvanceLabor(int codigoAvanceLabor)
        {
            return this.Context.AvanceLabor.Where(x => x.CodigoAvanceLabor.Equals(codigoAvanceLabor)).FirstOrDefault();
        }

        /// <summary>
        /// Método que devuelve lista de AvanceLabor
        /// </summary>
        /// <param name="codigoAvanceLabor"></param>
        /// <returns></returns>
        public List<AvanceLabor> BuscarAvanceLabor(int Anio, string mes)
        {
            return this.Context.AvanceLabor.OrderBy(x => x.Anio.Equals(Anio) && x.Mes.Equals(mes)).ToList();
        }

      
        /// <summary>
        /// Lista guia salida por año y mes
        /// </summary>
        /// <param name="anio"></param>
        /// <param name="mes"></param>
        /// <returns></returns>
        public List<AvanceLabor> ListarAvanceLabor(int anio, string mes)
        {
            return this.Context.AvanceLabor.Where(x => x.Anio.Equals(anio) && x.Mes.Equals(mes)).ToList();
        }

        /// <summary>
        /// Devuelve codigo de avance de labor generado
        /// </summary>
        /// <param name="anio"></param>
        /// <param name="mes"></param>
        /// <returns></returns>
        public int GenerarCodigoAvanceLabor(int anio, string mes)
        {
            return (int)this.Context.generarCodigoAvanceLabor(anio, mes).FirstOrDefault();
        }
        #endregion
    }
}
